<?php

/**
 * Fun��es gerais para uso no sistema
 */
class Util {

    /**
     * Le o diretrio informado como parametro e retorna um vetor listando todos os arquivos do diretorio lido, ignora os diretorios internos do diretorio informado
     * @param String $dir
     * @return Array
     */
    public static function listarArquivosDoDiretorio($dir) {
        if (chdir($dir)) {
            //lendo o diretorio
            if (is_dir($dir)) {
                if ($dh = opendir($dir)) {
                    while ($file = readdir($dh)) {
                        if (!is_dir($file) && $file != 'Thumbs.db' && $file != '.' && $file != '..') {
                            $arquivos[] = $file;
                        }
                    }
                    closedir($dh);
                }
            }
        }
        return $arquivos;
    }

    /**
     * L� o diret�rio de projetos do usuario e retorna um vetor listando todos os projetos, o segundo parametro � opcional, forne�a true quando desejar que os nomes dos projetos retornem em min�sculo.
     * @param Usuario $usuario
     * @return Array
     */
    public static function listarTodosProjetos($usuario, $minusculo = false) {
        $dir = '../config/' . $usuario->getLogin();

        if (chdir($dir)) {
            $dirProjetos = 'projetos';
            if (is_dir($dirProjetos)) {
                if ($dh = opendir($dirProjetos)) {
                    while ($file = readdir($dh)) {
                        if ($file != 'Thumbs.db' && $file != '.' && $file != '..') {
                            $arquivos[] = $minusculo ? strtolower($file) : $file;
                        }
                    }
                    closedir($dh);
                }
            }
        }
        return $arquivos;
    }

    /**
     * Recebe uma data em formato aaaa-mm-dd e devolve no formato dd/mm/yyyy
     *
     * @param String $data
     * @return String
     */
    public static function dataBancoExibir($data) {
        $arrayData = explode('-', $data);
        return ($arrayData[2] . '/' . $arrayData[1] . '/' . $arrayData[0]);
    }

    /**
     * Recebe uma data em formato dd/mm/yyyy e devolve no formato aaaa-mm-dd
     *
     * @param String $data
     * @return String
     */
    public static function dataGravarBanco($data) {
        $arrayData = explode('/', $data);
        return ($arrayData[2] . '-' . $arrayData[1] . '-' . $arrayData[0]);
    }

    /**
     * Recebe o nome no formato banco de dados e retorna no formato classe
     * 
     * @static m�todo static para acesso direto chamando a classe::metodo
     * @param String $nome
     * @return String
     */
    public static function nomeDbToClasse($nome) {
        $retorno = '';
        $mat = explode('_', $nome);

        for ($i = 0; $i < sizeof($mat); $i++) {
            $retorno .= ucfirst($mat[$i]);
        }

        return $retorno;
    }

    /**
     * Recebe o nome no formato banco de dados e retorna no formato atributo
     * 
     * @static m�todo static para acesso direto chamando a classe::metodo
     * @param String $nome
     * @return String
     */
    public static function nomeDbToAtributo($nome) {
        $retorno = '';
        $mat = explode('_', $nome);

        for ($i = 0; $i < sizeof($mat); $i++) {
            if ($i > 0) {
                $retorno .= ucfirst($mat[$i]);
            } else {
                $retorno .= strtolower($mat[$i]);
            }
        }

        return $retorno;
    }
    
    /**
     * Recebe o nome no formato banco de dados e retorna no formato atributo
     * 
     * @static m�todo static para acesso direto chamando a classe::metodo
     * @param String $nome
     * @return String
     */
    public static function nomeDbToLabel($nome) {
        $retorno = '';
        $mat = explode('_', strtolower($nome));

        for ($i = 0; $i < sizeof($mat); $i++) {
            if ($i > 0) {
                $retorno .= ' ';
            }
            $retorno .= ucfirst($mat[$i]);
        }

        return $retorno;
    }

    /**
     * Executa a opera��o lpad. Acrescenta o complemento a esquerda do texto conforme o n�mero de caracteres informado.
     *
     * @param String $texto
     * @param String $complemento
     * @param int $numCaracteresInserir
     * @return String
     */
    public static function lpad($texto, $complemento, $numCaracteresInserir) {
        return str_pad($texto, $numCaracteresInserir + strlen($texto), $complemento, STR_PAD_LEFT);
    }

    /**
     * Retorna o nome (com extens�o) da p�gina atual. [utiliza��o comum no atributo action da tag form]
     *
     * @return String
     */
    public static function getMySelf() {
        return str_replace('/', '', $_SERVER['SCRIPT_NAME']);
    }
    
    /**
     * Verifica se a string esta vazia.
     * @return boolean
     */
    public static function isEmpty($text) {
        if (isset($text)) {
            $text = trim($text);
            if (empty($text)) {
                return true;
            }
        } else {
            return true;
        }
        return false;
    }
    
    /**
     * Verifica se a string nao esta vazia.
     * @return boolean
     */
    public static function isNotEmpty($text) {
        return !(self::isEmpty($text));
    }

}

?>